package main

import (
	"encoding/json"
	"fmt"
)

type A struct {
	Num int
}

type B struct {
	Num int
}

type Monster struct {
	Name  string `json:"name":` //`json:"name"` 就是 struct tag
	Age   int    `json:"age"`
	Skill string `json:"skill"`
}

func main() {
	var a A
	var b B
	a = A(b) // 可以转换，但是有要求，就是结构体的字段要完全一样(包括：名字、个数和类型)
	fmt.Println(a, b)

	//1.创建一个Monster变量
	monster := Monster{"牛魔王", 500, "芭蕉扇~"}

	//2.将monster变量序列化为 json格式字串
	//json.Marshal 函数中使用反射，这个讲解反射时，我会详细介绍
	jsonStr, err := json.Marshal(monster)
	if err != nil {
		fmt.Println("json处理错误", err)
	}
	fmt.Println("jsonStr=", string(jsonStr))
}

/*
结构体进行type重新定义(相当于取别名),golang认为是新的数据类型，但是相互间可以强转
type Student struct {
	Name string
	Age int
}

type Stu Student

func main(){
	var stu1 Student
	var stu2 Stu
	stu2 = stu1 //写法正确吗？错误，可以这样修改: stu2 = Stu(stu1)
				//虽然Stu是根据Student重命名过来的，但是golang认为是两种不同的数据类型
	fmt.Println(stu1,stu2)
}



案例：根据int，自定义integer类型，练习强转
type integer int

func main(){
	var i integer = 10
	var j int = 20

	j = i //正确吗？不可以！修改: j=int(i)
	fmt.Println(i,j)
}
*/
